//package com.youka.bussiness.common.utils;
//
//import com.auth0.jwt.JWT;
//import com.auth0.jwt.algorithms.Algorithm;
//import com.auth0.jwt.interfaces.DecodedJWT;
//import com.youka.bussiness.common.base.BaseException;
//import org.apache.commons.lang.StringUtils;
//
//import java.io.UnsupportedEncodingException;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.Map;
//
//public class JWTUtil {
//
//
//    public static final ThreadLocal<Long> USERID_THREADLOCAL = new ThreadLocal<>();
//
//    /**
//     * 创建token
//     */
//    public static String createToken(String userId, String context, long expire) throws IllegalArgumentException, UnsupportedEncodingException {
//        Algorithm al = Algorithm.HMAC256("secretkey");
//        Map<String, Object> header = new HashMap<>(2);
//        header.put("typ", "JWT");
//        header.put("alg", "HS256");
//        String token = JWT.create()
//                .withHeader(header)
//                // 主题
//                .withSubject(userId)
//                //设备类型
//                .withClaim("context", context)
//                //时间戳
//                .withIssuedAt(new Date())
//                // 过期时间
//                .withExpiresAt(new Date(System.currentTimeMillis() + expire * 1000))
//                // 签名
//                .sign(al);
//        return token;
//    }
//
//    /**
//     * 验证token
//     */
//    public static String verifyToken(String token) {
//        DecodedJWT decode = JWT.decode(token);
//        Date expiresAt = decode.getExpiresAt();
//        //获取用户id
//        String subject = decode.getSubject();
//        if (StringUtils.isBlank(subject)) {
//            throw new BaseException("1014", "token有误");
//        }
//        try {
//            long userId = Long.parseLong(subject);
//            USERID_THREADLOCAL.set(userId);
//        } catch (NumberFormatException e) {
//            throw new BaseException("1014", "token有误");
//        }
//        if (expiresAt == null) {
//            throw new BaseException("1014", "token有误");
//        }
//
//        if (expiresAt.getTime() >= System.currentTimeMillis()) {
//            //正常
//            return "OK";
//        } else {
//            throw new BaseException("1016", "token过期");
//        }
//    }
//}
